package org.example.oop.collection;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * org.example.oop.collection
 *
 * @author moLei
 * @description 集合
 * @since 2025/6/16
 */
public class Demo01 {

    /**
     *  collection（单个对象的存储结构）
     *      list（有序的存储结构）：创建、添加、遍历。底层是使用数组实现的
     *          arrayList（动态数组）
     *      set（无序不重复的存储结构）
     *          HashSet
     *
     *  map（键值对的存储结构）
     *
     *  泛型：规定集合中对象的类型
     */
    public static void main(String[] args) {

        // List
        // 创建，初始化长度为10
        List<String> list = new ArrayList<>();
        // 添加到末尾，同时对modSize进行加1，modCount是记录当前集合被修改的次数
        /*
        ensureCapacityInternal(size + 1);   对数组的容量进行检测，（计算新容量，原1.5倍【oldSize + oldSize >> 1】，检查新容量是否满足最小需求不满足则使用最小容量，
                                            满足则判断长度是否超过int型大小，超过则使用hugeCapacity()进行处理返回一INTEGER_MAX，最后进行数组的复制）
        elementData[size++] = e;    设置值
        return true;    返回结果
         */
        list.add("hello");

        // 移除数据，modCount加1，如果是移除指定位置的元素的话那么直接将该元素后的数据往前移动一位进行覆盖，清空最后一个元素并更新size值
        // 如果移除指定对象，那么会进行集合的便利，移除第一个符合条件的对象，其余对象不进行移除
        list.add("hello");
        list.remove("hello");

        list.containsAll(list);
        // 遍历
        for (String s : list) {
            System.out.println(s);
        }



        // Set集合，集合中的元素是无序且不重复的
        Set<String> set = new HashSet<>();
        // 添加元素，add方法底层调用的是HashMap的put方法，将需要添加的值作为key，final修饰的空对象作为值，添加成功返回true，添加失败返回false
        set.add("hello");
    }
}
